package edu.upe.poli.dsc.sd.servidorSocketUdp;

import java.net.DatagramPacket;

import edu.upe.poli.dsc.sd.clienteSocketUdp.ClienteUDP;
import edu.upe.poli.dsc.sd.clienteSocketUdp.FabricaClienteUDP;
import edu.upe.poli.dsc.sd.mensagem.Message;

public class ProcessadorServicoUDP implements Runnable {

	private IProcessadorMensagemUDP iProcessadorMensagemUDP;

	private Message mensagem;

	private DatagramPacket packet;

	public ProcessadorServicoUDP(Message mensagem, DatagramPacket packet,
			IProcessadorMensagemUDP procUDP) {

		this.mensagem = mensagem;
		this.packet = packet;
		this.iProcessadorMensagemUDP = procUDP;
	}

	public void run() {
		
		// processa a mensagem e finalmente a envia de volta para o cliente
		String mensagemProcessada = iProcessadorMensagemUDP.processarMensagem(mensagem.getData());
		
		// envia a mensagem de volta para o cliente
		((ClienteUDP) FabricaClienteUDP.getClienteUDP()).enviarMensagemAssincrona(
				mensagem.getId(), mensagemProcessada, packet.getAddress().getHostAddress(), 
				packet.getPort());
	}
}
